package study.JavaBase;

/**
 * date:2025.10.11
 * title:变量类型
 * author:fzy
 */
public class Java_3 {
    public static void main(String[] args) {
        DataInit.ToInit();
        Java_3 java3 = new Java_3();
        java3.exchangeTest();
        java3.testStaticData();
        java3.testStaticCount();
    }

    public void exchangeTest() {
        int a = 1;
        int b = 2;
        RunExchangeTest.dataExchange(a, b);
        System.out.println("a = " + a + " , b = " + b);
    }

    public void testStaticData() {
        ExampleClass.b = 1211;
        ExampleClass c = new ExampleClass();
        ExampleClass e = new ExampleClass();
        // java可以通过实例来访问其静态变量
//        e.b = 1;
        System.out.println(ExampleClass.b);
    }
    public void testStaticCount(){
        TestClass a = new TestClass();
        TestClass b = new TestClass();
        TestClass c = new TestClass();
        int count = TestClass.getCount();
        System.out.println(count+"次数");
    }
}

//变量初始化
class DataInit {
    static void ToInit() {
        int a, b, c;
        int d = 3, e, f;
        a = 2;
        b = a;
        e = 1;
        byte fff = 111;
    }
}

/**
 * 局部变量：1.作用域限制在所在方法中，在方法执行过后就被垃圾回收
 * 实例变量：在对象创建时创建，对象销毁时销毁
 * 类变量：类中定义的变量，跟类的数量无关，所有类只有一份，被所有实例共享,静态变量随类创建创建，程序销毁销毁(类销毁时销毁)，
 * 如果一个静态变量依赖另一个静态变量，那么这个变量定义在后面
 * 成员变量在堆内存，局部变量在栈内存
 * 成员变量随着对象存在存在，局部变量随着方法调用存在
 */
//变量类型
class ExampleClass {
    static int b = 1;//类变量，静态变量
    static int c = b + 1;
    public int a;//实例变量

    //参数变量
    public void ExampleFun(int d) {
        int a = 1;//局部变量
    }
}

/**
 * 值传递：传递的为值的副本，当参数被修改不会影响原值
 * 引用传递：修改的为值所在的地址，修改参数影响原有值
 */
class RunExchangeTest {
    static void dataExchange(int a, int b) {
        int c;
        c = a;
        a = b;
        b = c;
    }
}

//静态变量计算创建类的次数
class TestClass {
    static int a = 0;

    TestClass() {
        a++;
    }
    static int getCount(){
        return a;
    }
}

//注意事项
//变量名在一个作用域不能重复
//变量使用之前，必须赋值
//防止定义数据越位，在定义特定值需要加特定字符 如long a = 1000000000L
//浮点数默认double，整数默认int


/**
 * 标识符
 * 1.数组，字母，_,$组成
 * 2.不能数字开头
 * 3.不能关键字
 * 4.区分大小写
 */
